using System;
using System.Collections.Generic;
using CoreMobile.cmd;
using VABMobile.cmd;
using VABMobile.print;

namespace VABMobile.oo
{
    public class Boleto : IParameter, PrintableDocument
    {
        public static string DEFAULT_SERIE = "VAB"; 

        private string serie;
        //private long numero;
        private double monto;
        private DateTime horaVenta;
        private Turno turno;
        private Persona pasajero;
        private Asiento asiento;
        private string agencia; //origen
        private string destino;

        public Boleto(double monto, Persona pasajero, Asiento asiento, Turno turno)
        {
            this.Monto = monto;
            this.turno = turno;
            this.asiento = asiento;
            this.Pasajero = pasajero;


            this.serie = DEFAULT_SERIE;
            this.horaVenta = DateTime.Now;
        }

        public Boleto()
        {
            this.serie = DEFAULT_SERIE;
            this.horaVenta = DateTime.Now;
        }

        public Boleto setAsiento(Asiento a)
        {
            this.asiento = a;
            return this;
        }

        public string Numero
        {   //aaaammddhhmmss
            get { return ""+HoraVenta.Year
                +HoraVenta.Month
                +HoraVenta.Day
                +HoraVenta.Hour
                +HoraVenta.Minute
                +HoraVenta.Second; }
        }

        public Asiento Asiento
        {
            get { return asiento; }
        }

        public Persona Pasajero
        {
            get { return pasajero; }
            set { pasajero = value; }
        }

        public Turno Turno
        {
            get { return turno; }
            set { turno = value; }
        }

        public DateTime HoraVenta
        {
            get { return horaVenta; }
        }

        public double Monto
        {
            get { return monto; }
            set { monto = value; }
        }

        public string Serie
        {
            get { return serie; }
        }

        public string Agencia
        {
            get { return agencia; }
            set { agencia = value.Trim(); }
        }

        public string Destino
        {
            get { return destino; }
            set { destino = value.Trim(); }
        }

        #region Implementation of PrintableDocument

        public string initialBarCode()
        {
            return null;
        }

        public string[] bodyText()
        {
            return new string[]
                       {
                             "Serie:             " + this.serie
                           , "Numero:            " + this.Numero
                           , "Fecha y Hora:    " + this.ppFechaHora()
                           //, "Origen:            " + turno.Itinerario.Origen
                           //, "Destino:           " + turno.Itinerario.Destino
                           , "Servicio:    " + turno.Id
                           , "Origen:      " + agencia.Trim()
                           , "Destino:     " + destino.Trim()
                           , ""
                           , "Pasajero:          " + this.pasajero.ppRut()
                           , "================================"
                           , "\x1b|bC\x1b|Monto:           $" + this.monto
                           , "================================"
            }
            ;
        }

        public string ppFechaHora()
        {
            return ppFecha() + "  " + ppHora();
        }

        public string ppHora()
        {
            return horaVenta.ToString("HH:mm");
        }

        public object ppFecha()
        {
            return horaVenta.ToString("dd/MM/yy");

        }

        public string finalBarCode()
        {
            return this.Numero + "";
        }

        #endregion
    }
}